package com.kuangstudy.service.prize;

import com.kuangstudy.constant.RedisConstants;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.List;

/**
 * @author renyitong
 * @version 1.0.0
 * @createTime 2023年09月18日
 * @Description 完成抽一等奖、二等奖、三等奖功能
 */
@Service
@Slf4j
public class DrowPrizeService {

    @Autowired
    private RedisTemplate redisTemplate;

    @PostConstruct
    private void initPrize(){
        log.info("初始化奖品等级信息...");
        // 防止重复加入到缓存中
        if (!redisTemplate.hasKey(RedisConstants.USER_DROW_PRIZE_SET)) {
            List<Integer> initDataList = this.initDataList();
            initDataList.forEach(userId -> redisTemplate.opsForSet().add(RedisConstants.USER_DROW_PRIZE_SET, userId));
        }
    }


    /**
     * 模拟100用户抽奖
     * 比如：公司搞年会，参与的小伙伴要进行抽奖，这个时候我们就把所有参与的小伙伴
     * 加入到set集合中即可：比如把小伙伴的ID或者工号加入到集合中。
     * @return
     */
    private List<Integer> initDataList() {
        // todo 这里应该去数据库去查询
        List<Integer> listdata = new ArrayList<>();
        for (int i = 0; i < 100; i++) {
            listdata.add(i + 1);
        }
        return listdata;
    }

    /**
     * 模拟用户进行抽奖
     * @param userNum 参与抽奖的人数
     * @return
     */
    public List<Integer> drowPrize(Integer userNum){
        if (!redisTemplate.hasKey(RedisConstants.USER_DROW_PRIZE_SET)){
            return new ArrayList<>();
        }
        return (List<Integer>)redisTemplate.opsForSet().pop(RedisConstants.USER_DROW_PRIZE_SET, userNum);
    }

}
